#ifndef LED_GPIO_H
#define LED_GPIO_H

#include <gpiod.h>

/*
 * 尝试对 /sys/class/leds/<led_sysfs_name> 执行 unbind，释放内核对 GPIO 的占用。
 * 成功返回0，失败<0。
 */
int led_try_unbind_owner(const char *led_sysfs_name);

/*
 * 申请 LED 对应的 GPIO 行为输出，必要时先对 led_sysfs_name 执行 unbind 再重试。
 * - chip_label / line_offset / active_low / consumer：同 gpiod 约定
 * - led_sysfs_name：用于解绑（可为 NULL 表示不尝试解绑）
 * - out_chip/out_line：输出已打开的 chip 与 line（调用方负责释放）
 * 成功返回0，失败<0。
 */
int led_request_output_line(const char *chip_label,
                            unsigned int line_offset,
                            int active_low,
                            const char *consumer,
                            const char *led_sysfs_name,
                            struct gpiod_chip **out_chip,
                            struct gpiod_line **out_line);

/*
 * 按逻辑值设置 LED 电平（考虑 active_low）。
 */
int led_set_logical(struct gpiod_line *line, int active_low, int logical);

#endif /* LED_GPIO_H */

